package com.by.common.utils;

import com.by.mapper.GenerateCodeMapper;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

/**
 * @author ServivE
 * @version 0.1
 * @className GenerateCode
 * @description
 * @date 2024/10/25 20:04
 * @since jdk17
 */
@Component
public class GenerateCode {
    @Autowired
    GenerateCodeMapper generateCodeMapper;
    //声明头部为固定的（MSDD）
//    final String PREFIX = "MSDD";
    String maxCode = null;//当前最大编码
    public String generateCode( String PREFIX) {
        //获取系统年月
        String ym = DateUtils.getYm();
        //判断当前内存中是否存在最大编码
        if (null == maxCode) {
            //查询当月最大编码
            maxCode = generateCodeMapper.queryMaxCode(ym);
            //如果没有
            if (null == maxCode) {
                //说明当前是当月第一个询价单 MSDD202409001
                maxCode = PREFIX + ym + "001";
                return maxCode;
            }
        }

        //不为空
        //获取当前最大编码 的 年月
        String tmpYm = maxCode.substring(4, 10);
        //比较 最大编码 的月份与当前系统时间
        if (!ym.equals(tmpYm)) {
            //跨月 归零
            maxCode = PREFIX + ym + "001";
            return maxCode;
        }

        //如果相等
        //获取递增序号
        String seq=maxCode.substring(10);
        Integer tmp= Integer.parseInt(seq);
        tmp++;
        maxCode=PREFIX+ym+String.format("%03d",tmp);
        return maxCode;
    }
}
